"The SNES9x savestate file format" v0.1
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
by creaothceann
1. Content
ŻŻŻŻŻŻŻŻŻŻ
1. Content
2. Disclaimer
3. Revisions
4. Conventions
5. Savestates
6. File blocks
7. Unstructured file blocks
8. Structured file blocks
9. Variables
2. Disclaimer
ŻŻŻŻŻŻŻŻŻŻŻŻŻ
The information herein is provided as-is for anything you want. I tried to make it as accurate
as possible, but that might not mean much. And specifications can change at any time, too.
Nevertheless this document should be helpful, unless the savestate file format was _completely_
revamped since the last revision.
3. Revisions
ŻŻŻŻŻŻŻŻŻŻŻŻ
2007-10-09: initial version 0.1 no sub-structure details yet
4. Conventions
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
I'll be using the following data types:
Byte = unsigned 8-bit integer: $00..$00000000000000FF
Word = unsigned 16-bit integer: $00..$000000000000FFFF
DWord = unsigned 32-bit integer: $00..$00000000FFFFFFFF
QWord = unsigned 64-bit integer: $00..$FFFFFFFFFFFFFFFF
Int64 = signed 64-bit integer: -(2^63)..(2^63 - 1)
Boolean = 8-bit type: 'False' (no bit set), 'True' (any bit set)
Char = 8-bit type: ANSI/ASCII character
"Array[x] of y" simply means: "x variables of type y without any padding bytes between them".
The structures listed here also have no empty space between their variables.
5. Savestates
ŻŻŻŻŻŻŻŻŻŻŻŻŻ
SNES9x savestates (also called "freeze files" or "snapshots") have the filename extension
'.00x', with 'x' being a decimal digit ('0'..'9'). The files are usually compressed with GZIP;
they can be decompressed with tools like WinRAR. The GZIP library (and hence SNES9x) can also
handle uncompressed files.
At the beginning of the file there's a file header:
Signature : Array[8] of Char
Colon : Char
Version : Array[4] of Char
LineFeed : Char
"Signature" must be the string '#!snes9x', "Colon" must be ':', and "LineFeed" should be the
ASCII character #10. "Version" should be the decimal number string '0001'; otherwise the file
format itself would be a newer one.
The rest of the savestate is structured into file blocks of variable size.
6. File blocks
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
In an uncompressed file they look like this:
Name : Array[3] of Char
Separator1 : Char
Size : Array[6] of Char
Separator2 : Char
Data : Array[Size] of Byte
"Name" identifies the file block type. "Separator1" and "Separator2" contain the ASCII character
#58 (colon ':'). "Size" is a decimal number string describing the number of bytes in the "Data"
part.
The standard file block order is like this:
block 01: NAM
block 02: CPU
block 03: REG
block 04: PPU
block 05: DMA
block 06: VRA
block 07: RAM
block 08: SRA
block 09: FIL
block 10: APU (if emulating the APU)
block 11: ARE (if emulating the APU)
block 12: ARA (if emulating the APU)
block 13: SOU (if emulating the APU)
block 14: SA1 (if emulating the SA-1)
block 15: SAR (if emulating the SA-1)
block 16: SP7 (if emulating the SPC7110)
block 17: RTC (if emulating the SPC7110 RTC)
File readers should accept the blocks in any order though, even several blocks of the same type.
================================================================================================
7. Unstructured file blocks
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
The following block types are simple byte or char arrays:
7.1 ARA (APU RAM)
7.2 FIL (FillRAM)
7.3 NAM (cartridge name)
7.4 RAM (WRAM data)
7.5 SRA (SRAM data)
7.6 VRA (VRAM data)
Unstructured file blocks are just streamed to disk.
7.1 ARA = Array[65536] of Byte
ŻŻŻŻŻŻŻ
The "audio processing unit" (APU) RAM, which stores BRR-encoded samples and the program to play
them.
Note that read accesses to $FFC0..$FFFF can return either RAM as normal, or they can access the
content of the 64-byte "IPL ROM" that is responsible for data communications after a reset.
SNES9x handles that by defining a variable called "ExtraRAM" (see the APU file block), which is
used when RAM is selected.
7.2 FIL = Array[$0000..$7FFF] of Byte
ŻŻŻŻŻŻŻ
In the SNES9x code, "FillRAM" is a pointer to 32 KB of scratch memory. Whenever the 65c816 does
a write access to addresses $xx:0000..$xx:7FFF, the value is also written into this array. With
"FillRAM" the developers can access registers by address rather than by name.
7.3 NAM = Array[?] of Char
ŻŻŻŻŻŻŻ
A null-terminated string storing the filename of the cartridge ROM, as returned by the OS. The
block size is the length of the string plus the terminating byte (ASCII #0).
The string should not be treated as readable since there's no encoding. It's just used to detect
if the previously loaded ROM matches the currently loaded one.
7.4 RAM = Array[65536 * 2] of Byte
ŻŻŻŻŻŻŻ
The "work RAM" (WRAM) data, usually accessed via banks $7E and $7F.
7.5 SRA = Array[65536] of Byte
ŻŻŻŻŻŻŻ
The "Save RAM" (SRAM) data, used by cartridges.
SNES9x loads/saves only that much from/to savestates, but otherwise uses 128 KB in the rest of
the program. Maybe just an oversight, or the data for cartridges with larger SRAM chips is
stored elsewhere?
7.6 VRA = Array[65536] of Byte
ŻŻŻŻŻŻŻ
The "video RAM" (VRAM) data, which the SNES stores in two RAM chips.
In this savestate block the even-numbered bytes (0, 2, 4, ...) are from the first memory chip;
the odd-numbered bytes are from the second one. This is also how most other emulators, e.g.
ZSNES, do it. (The exception is Super Sleuth, which stores the content of the two chips in two
separate arrays.)
================================================================================================
8. Structured file blocks
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
The following block types contain variables, like a Pascal "record" or a C/C++ "struct":
8.01 APU (APU status)
8.02 ARE (APU registers)
8.03 CPU (CPU status)
8.04 DMA (DMA/HDMA channels)
8.05 PPU (PPU status)
8.06 REG (CPU registers)
8.07 RTC (SPC7110 RTC status)
8.08 SA1 (SA-1 status)
8.09 SAR (SA-1 registers)
8.10 SP7 (SPC7110 status)
8.11 SOU (sound data)
Variables consisting of multiple bytes must be stored in big-endian format. (Just for the
record, the x86/Windows platform is little-endian.)
8.1 APU
ŻŻŻŻŻŻŻ
The status of the audio processing unit.
Cycles : DWord
ShowROM : Boolean
Flags : Byte
KeyedChannels : Byte
OutPorts : Array[ 4] of Byte
DSP : Array[128] of Byte
ExtraRAM : Array[ 64] of Byte
Timer : Array[ 3] of Word
TimerTarget : Array[ 3] of Word
TimerEnabled : Array[ 3] of Boolean
TimerValueWritten : Array[ 3] of Boolean
Multi-byte variables must be stored in big-endian format.
8.2 ARE
ŻŻŻŻŻŻŻ
The "APU registers", i.e. the registers of the Sony "SPC700" audio processor.
P : Byte
YA : Word
X : Byte
S : Byte
PC : Word
Multi-byte variables must be stored in big-endian format.
8.3 CPU
ŻŻŻŻŻŻŻ
The status of the main processor "Ricoh 5A22", which is based on WDC/GTE's "65c816" core.
Flags : DWord
BranchSkip : Boolean
NMIActive : Boolean
IRQActive : Boolean
WaitingForInterrupt : Boolean
WhichEvent : Byte
Cycles : DWord
NextEvent : DWord
V_Counter : DWord
MemSpeed : DWord
MemSpeedx2 : DWord
FastROMSpeed : DWord
Multi-byte variables must be stored in big-endian format.
8.4 DMA
ŻŻŻŻŻŻŻ
The "DMA" file block consists of 8 sub-structures, one for each DMA/HDMA channel. They look like
this:
TransferDirection : Boolean
AAddressFixed : Boolean
AAddressDecrement : Boolean
TransferMode : Byte
ABank : Byte
AAddress : Word
Address : Word
BAddress : Byte
TransferBytes : Word
HDMAIndirectAddressing : Boolean
IndirectAddress : Word
IndirectBank : Byte
Repeat : Byte
LineCount : Byte
FirstLine : Byte
Multi-byte variables must be stored in big-endian format.
8.5 PPU
ŻŻŻŻŻŻŻ
The status of the two PPU (picture-processing unit) chips, and some joypad and mouse data.
BGMode : Byte
BG3Priority : Boolean
Brightness : Byte
VMA : 1 "VMA" structure
BG : 4 "BG" structures
CGFLIP : Boolean
CGDATA : Array[256] of Word
FirstSprite : Byte
OBJ : 128 "OBJ" structures
OAMPriorityRotation : Boolean
OAMAddr : Word
OAMFlip : Boolean
OAMTileAddress : Word
IRQVBeamPos : Word
IRQHBeamPos : Word
VBeamPosLatched : Word
HBeamPosLatched : Word
HBeamFlip : Byte
VBeamFlip : Byte
HVBeamCounterLatched : Boolean
MatrixA : Word
MatrixB : Word
MatrixC : Word
MatrixD : Word
CentreX : Word
CentreY : Word
Joypad1ButtonReadPos : Byte
Joypad2ButtonReadPos : Byte
Joypad3ButtonReadPos : Byte
CGADD : Byte
FixedColourRed : Byte
FixedColourGreen : Byte
FixedColourBlue : Byte
SavedOAMAddr : Word
ScreenHeight : Word
WRAM : DWord
ForcedBlanking : Boolean
OBJNameSelect : Word
OBJSizeSelect : Byte
OBJNameBase : Word
OAMReadFlip : Boolean
VTimerEnabled : Boolean
HTimerEnabled : Boolean
HTimerPosition : Word
Mosaic : Byte
Mode7HFlip : Boolean
Mode7VFlip : Boolean
Mode7Repeat : Boolean
Window1Left : Byte
Window1Right : Byte
Window2Left : Byte
Window2Right : Byte
ClipWindowOverlapLogic : Array[6] of Byte
ClipWindow1Enable : Array[6] of Boolean
ClipWindow2Enable : Array[6] of Boolean
ClipWindow1Inside : Array[6] of Boolean
ClipWindow2Inside : Array[6] of Boolean
CGFLIPRead : Boolean
Need16x8Mulitply : Boolean
BGMosaic : Array[4] of Boolean
OAMData : Array[544] of Byte
Need16x8Mulitply_2 : Boolean
MouseSpeed : Array[2] of Byte
Multi-byte variables must be stored in big-endian format.
8.6 REG
ŻŻŻŻŻŻŻ
The registers of the 65c816.
PB : Byte
DB : Byte
P : Word
A : Word
D : Word
S : Word
X : Word
Y : Word
PC : Word
Multi-byte variables must be stored in big-endian format.
8.7 RTC
ŻŻŻŻŻŻŻ
The status of the SPC7110's real-time clock.
reg : Array[16] of Byte
index : Word
control : Byte
init : Boolean
last_used : DWord
Multi-byte variables must be stored in big-endian format.
8.8 SA1
ŻŻŻŻŻŻŻ
The status of the SA-1, which is another "65c816" clocked at 10 MHz.
Flags : DWord
NMIActive : Boolean
IRQActive : Boolean
WaitingForInterrupt : Boolean
op1 : Word
op2 : Word
arithmetic_op : DWord
sum : Int64
overflow : Boolean
Multi-byte variables must be stored in big-endian format.
8.9 SAR
ŻŻŻŻŻŻŻ
The SA-1 processor registers.
PB : Byte
DB : Byte
P : Word
A : Word
D : Word
S : Word
X : Word
Y : Word
PC : Word
Multi-byte variables must be stored in big-endian format.
8.10 SP7
ŻŻŻŻŻŻŻŻ
The status of the "SPC7110", which is a data decompression chip.
reg4800 : Byte
reg4801 : Byte
reg4802 : Byte
reg4803 : Byte
reg4804 : Byte
reg4805 : Byte
reg4806 : Byte
reg4807 : Byte
reg4808 : Byte
reg4809 : Byte
reg480A : Byte
reg480B : Byte
reg480C : Byte
reg4811 : Byte
reg4812 : Byte
reg4813 : Byte
reg4814 : Byte
reg4815 : Byte
reg4816 : Byte
reg4817 : Byte
reg4818 : Byte
reg4820 : Byte
reg4821 : Byte
reg4822 : Byte
reg4823 : Byte
reg4824 : Byte
reg4825 : Byte
reg4826 : Byte
reg4827 : Byte
reg4828 : Byte
reg4829 : Byte
reg482A : Byte
reg482B : Byte
reg482C : Byte
reg482D : Byte
reg482E : Byte
reg482F : Byte
reg4830 : Byte
reg4831 : Byte
reg4832 : Byte
reg4833 : Byte
reg4834 : Byte
reg4840 : Byte
reg4841 : Byte
reg4842 : Byte
AlignBy : Byte
written : Byte
offset_add : Byte
DataRomOffset : DWord
DataRomSize : DWord
bank50Internal : DWord
bank50 : Array[65536] of Byte
Multi-byte variables must be stored in big-endian format.
8.11 SOU
ŻŻŻŻŻŻŻŻ
The status of the APU's DSP. On the SNES, these settings are accessed by the SPC700 by writing
to address $00F2 (selects a DSP address) and reading/writing $00F3 (reads/writes a DSP register
value).
master_volume_left : Word
master_volume_right : Word
echo_volume_left : Word
echo_volume_right : Word
echo_enable : DWord
echo_feedback : DWord
echo_ptr : DWord
echo_buffer_size : DWord
echo_write_enabled : DWord
echo_channel_enable : DWord
pitch_mod : DWord
dummy : Array[3] of DWord
channel : 8 "SoundChn" structures
Multi-byte variables must be stored in big-endian format.
================================================================================================
9. Variables
ŻŻŻŻŻŻŻŻŻŻŻŻ
9.1 [APU] Cycles
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.1 [APU] ShowROM
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.1 [APU] Flags
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.1 [APU] KeyedChannels
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.1 [APU] OutPorts
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.1 [APU] DSP
ŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.1 [APU] ExtraRAM
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.1 [APU] Timer
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.1 [APU] TimerTarget
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.1 [APU] TimerEnabled
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.1 [APU] TimerValueWritten
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.2 [ARE] P
ŻŻŻŻŻŻŻŻŻŻŻ
9.2 [ARE] YA
ŻŻŻŻŻŻŻŻŻŻŻŻ
9.2 [ARE] X
ŻŻŻŻŻŻŻŻŻŻŻ
9.2 [ARE] S
ŻŻŻŻŻŻŻŻŻŻŻ
9.2 [ARE] PC
ŻŻŻŻŻŻŻŻŻŻŻŻ
9.3 [CPU] Flags
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.3 [CPU] BranchSkip
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.3 [CPU] NMIActive
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.3 [CPU] IRQActive
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.3 [CPU] WaitingForInterrupt
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.3 [CPU] WhichEvent
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.3 [CPU] Cycles
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.3 [CPU] NextEvent
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.3 [CPU] V_Counter
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.3 [CPU] MemSpeed
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.3 [CPU] MemSpeedx2
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.3 [CPU] FastROMSpeed
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.4 [DMA] TransferDirection
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.4 [DMA] AAddressFixed
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.4 [DMA] AAddressDecrement
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.4 [DMA] TransferMode
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.4 [DMA] ABank
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.4 [DMA] AAddress
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.4 [DMA] Address
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.4 [DMA] BAddress
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.4 [DMA] TransferBytes
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.4 [DMA] HDMAIndirectAddressing
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.4 [DMA] IndirectAddress
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.4 [DMA] IndirectBank
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.4 [DMA] Repeat
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.4 [DMA] LineCount
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.4 [DMA] FirstLine
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] BGMode
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] BG3Priority
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] Brightness
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] VMA
ŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] BG
ŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] CGFLIP
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] CGDATA
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] FirstSprite
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] OBJ
ŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] OAMPriorityRotation
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] OAMAddr
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] OAMFlip
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] OAMTileAddress
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] IRQVBeamPos
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] IRQHBeamPos
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] VBeamPosLatched
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] HBeamPosLatched
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] HBeamFlip
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] VBeamFlip
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] HVBeamCounterLatched
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] MatrixA
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] MatrixB
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] MatrixC
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] MatrixD
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] CentreX
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] CentreY
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] Joypad1ButtonReadPos
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] Joypad2ButtonReadPos
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] Joypad3ButtonReadPos
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] CGADD
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] FixedColourRed
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] FixedColourGreen
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] FixedColourBlue
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] SavedOAMAddr
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] ScreenHeight
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] WRAM
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] ForcedBlanking
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] OBJNameSelect
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] OBJSizeSelect
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] OBJNameBase
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] OAMReadFlip
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] VTimerEnabled
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] HTimerEnabled
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] HTimerPosition
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] Mosaic
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] Mode7HFlip
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] Mode7VFlip
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] Mode7Repeat
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] Window1Left
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] Window1Right
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] Window2Left
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] Window2Right
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] ClipWindowOverlapLogic
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] ClipWindow1Enable
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] ClipWindow2Enable
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] ClipWindow1Inside
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] ClipWindow2Inside
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] CGFLIPRead
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] Need16x8Mulitply
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] BGMosaic
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] OAMData
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] Need16x8Mulitply_2
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.5 [PPU] MouseSpeed
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.6 [REG] PB
ŻŻŻŻŻŻŻŻŻŻŻŻ
9.6 [REG] DB
ŻŻŻŻŻŻŻŻŻŻŻŻ
9.6 [REG] P
ŻŻŻŻŻŻŻŻŻŻŻ
9.6 [REG] A
ŻŻŻŻŻŻŻŻŻŻŻ
9.6 [REG] D
ŻŻŻŻŻŻŻŻŻŻŻ
9.6 [REG] S
ŻŻŻŻŻŻŻŻŻŻŻ
9.6 [REG] X
ŻŻŻŻŻŻŻŻŻŻŻ
9.6 [REG] Y
ŻŻŻŻŻŻŻŻŻŻŻ
9.6 [REG] PC
ŻŻŻŻŻŻŻŻŻŻŻŻ
9.7 [RTC] reg
ŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.7 [RTC] index
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.7 [RTC] control
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.7 [RTC] init
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.7 [RTC] last_used
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.8 [SA1] Flags
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.8 [SA1] NMIActive
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.8 [SA1] IRQActive
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.8 [SA1] WaitingForInterrupt
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.8 [SA1] op1
ŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.8 [SA1] op2
ŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.8 [SA1] arithmetic_op
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.8 [SA1] sum
ŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.8 [SA1] overflow
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.9 [SAR] PB
ŻŻŻŻŻŻŻŻŻŻŻŻ
9.9 [SAR] DB
ŻŻŻŻŻŻŻŻŻŻŻŻ
9.9 [SAR] P
ŻŻŻŻŻŻŻŻŻŻŻ
9.9 [SAR] A
ŻŻŻŻŻŻŻŻŻŻŻ
9.9 [SAR] D
ŻŻŻŻŻŻŻŻŻŻŻ
9.9 [SAR] S
ŻŻŻŻŻŻŻŻŻŻŻ
9.9 [SAR] X
ŻŻŻŻŻŻŻŻŻŻŻ
9.9 [SAR] Y
ŻŻŻŻŻŻŻŻŻŻŻ
9.9 [SAR] PC
ŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4800
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4801
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4802
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4803
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4804
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4805
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4806
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4807
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4808
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4809
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg480A
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg480B
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg480C
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4811
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4812
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4813
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4814
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4815
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4816
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4817
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4818
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4820
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4821
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4822
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4823
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4824
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4825
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4826
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4827
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4828
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4829
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg482A
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg482B
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg482C
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg482D
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg482E
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg482F
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4830
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4831
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4832
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4833
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4834
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4840
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4841
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] reg4842
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] AlignBy
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] written
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] offset_add
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] DataRomOffset
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] DataRomSize
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] bank50Internal
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.10 [SP7] bank50
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.11 [SOU] master_volume_left
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.11 [SOU] master_volume_right
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.11 [SOU] echo_volume_left
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.11 [SOU] echo_volume_right
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.11 [SOU] echo_enable
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.11 [SOU] echo_feedback
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.11 [SOU] echo_ptr
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.11 [SOU] echo_buffer_size
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.11 [SOU] echo_write_enabled
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.11 [SOU] echo_channel_enable
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.11 [SOU] pitch_mod
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.11 [SOU] dummy
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
9.11 [SOU] channel
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF